home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok22.lha / Observer / Observer1.0.asm < prev    next >
Assembly Source File  |  1993-08-15  |  25KB  |  755 lines

  1. ***********************************************************************
  2. *
  3. * :Program.    Observer
  4. * :Author.     Holger Gzella
  5. * :Address.    Freischöffenweg 12  D-4600 Dortmund 16
  6. * :Phone.      (0231) 85 16 02
  7. * :Version.    v1.0
  8. * :Date.       6/7/89  19:44:07
  9. * :Copyright.  PD; SHAREWARE-payment welcome, of course
  10. * :Language.   68000-Assembler
  11. * :Translator. DevPac v2.11
  12. * :Contents.   THE VERY END OF ALL BOOTBLOCK-VIRUSES!!!
  13. * :Usage.      Observer1.0  or just click it
  14. * :Bugs.       a) don't start it twice (meditation)!
  15. * :Bugs.       b) doesn't work with one bootblock - my bootintro!!!!!
  16. * :Remark.     sorry lack of comments ... enjoy the code!
  17. * :Remark.     please leave my name in; I worked hard on this!
  18. *
  19. ***********************************************************************
  20.  
  21.                 incdir "dh1:Assembler/include/"         * individuell
  22.                 include "exec/resident.i"
  23.                 include "exec/memory.i"
  24.                 include "exec/execbase.i"
  25.                 include "exec/exec_lib.i"
  26.                 include "intuition/intuition_lib.i"
  27.                 include "misc/easystart.i"              * für WB-Start
  28.  
  29. *
  30. * Startup-Programm - prüft, ob schon was über KickTag installiert
  31. * ist - könnte das eigene Programm sein.
  32. *
  33.  
  34.                 move.l  _SysBase,a6                     * ist bereits
  35.                 move.l  KickTagPtr(a6),a0               * was im KickTagPtr
  36.                 cmp.l   #$0,a0                          * abgelegt (1.3 RAD:
  37.                 bne     InsYet                          * z.B.)?
  38.  
  39.                 lea     IntName,a1
  40.                 moveq.l #0,d0
  41.                 CALLEXEC OpenLibrary
  42.                 move.l  d0,a6
  43.  
  44.                 lea     InstallAlert,a0                 * Sicherheits-
  45.                 moveq.l #0,d0                           * abfrage
  46.                 move.l  #80,d1
  47.                 jsr     _LVODisplayAlert(a6)
  48.                 move.l  d0,d4
  49.                 move.l  a6,a1
  50.                 CALLEXEC CloseLibrary
  51.                 tst.l   d4
  52.                 bne     InstallStuff
  53.  
  54.                 moveq.l #0,d0
  55.                 rts
  56.  
  57. *
  58. * Ab hier wird der Code von "ResetStuff"-"ResetEnd" eingebunden.
  59. * Der ganze Kram muß im PUBLIC- und CHIP-Memory abgelegt sein.
  60. *
  61.  
  62. InstallStuff:   move.l  #MEMF_PUBLIC|MEMF_CLEAR|MEMF_CHIP,d1
  63.                 move.l  #48,d0
  64.                 CALLEXEC AllocMem                       * Speicher für
  65.                 move.l  d0,MemListPtr                   * MemList
  66.  
  67.                 move.l  d0,a0                           * Nodetype und
  68.                 move.b  #NT_MEMORY,8(a0)                * Anzahl der Ein-
  69.                 move.w  #4,14(a0)                       * träge setzen
  70.  
  71.                 move.l  #MEMF_PUBLIC|MEMF_CHIP,d1
  72.                 move.l  #ResetEnd-ResetStuff,d0
  73.                 CALLEXEC AllocMem                       * Speicher für
  74.                 move.l  d0,Code                         * Code
  75.  
  76.                 move.l  ResidentPtr,a0                  * merken
  77.                 move.l  Code,22(a0)
  78.  
  79.                 move.l  #MEMF_PUBLIC|MEMF_CHIP,d1
  80.                 move.l  #26,d0
  81.                 CALLEXEC AllocMem                       * Speicher für
  82.                 move.l  d0,NewRes                       * Resident-Modul
  83.  
  84.                 lea     Resident,a0                     * Resident-Modul
  85.                 move.l  #25,d0                          * in den neuen
  86.                 move.l  NewRes,a1                       * Speicher kopieren
  87.  
  88. CopyRes:        move.b  (a0)+,(a1)+
  89.                 dbra    d0,CopyRes
  90.  
  91.                 move.l  NewRes,a0                       * neues Resident-
  92.                 move.l  a0,d0                           * Modul patchen
  93.                 add.b   #26,d0
  94.                 move.l  d0,6(a0)
  95.                 move.l  a0,2(a0)
  96.  
  97.                 move.l  MemListPtr,a0                   * MemList patchen
  98.                 move.l  Code,16(a0)
  99.                 move.l  #ResetEnd-ResetStuff,20(a0)
  100.  
  101.                 move.l  NewRes,24(a0)
  102.                 move.l  #26,28(a0)
  103.  
  104.                 move.l  #MEMF_PUBLIC|MEMF_CLEAR|MEMF_CHIP,d1
  105.                 move.l  #8,d0
  106.                 CALLEXEC AllocMem                       * Speicher für
  107.                 move.l  d0,PtrTable                     * Tag-Ptr
  108.  
  109.                 move.l  d0,a0
  110.                 move.l  NewRes,(a0)
  111.  
  112.                 move.l  MemListPtr,a0                   * MemList richtig
  113.                 move.l  d0,32(a0)                       * setzen
  114.                 move.l  #8,36(a0)
  115.  
  116.                 move.l  a0,40(a0)
  117.                 move.l  #48,44(a0)
  118.  
  119.                 move.l  MemListPtr,MemPtr               * Zeiger zwischen-
  120.                 move.l  PtrTable,TagPtr                 * speichern
  121.  
  122.                 move.l  Code,a1
  123.                 move.l  #ResetEnd-ResetStuff-1,d0
  124.                 lea     ResetStuff,a0
  125.  
  126. Copy:           move.b  (a0)+,(a1)+
  127.                 dbra    d0,Copy
  128.  
  129.                 move.l  _SysBase,a5
  130.                 move.l  MemListPtr,KickMemPtr(a5)       * Zeiger
  131.                 move.l  PtrTable,KickTagPtr(a5)         * setzen
  132.  
  133.                 CALLEXEC SumKickData                    * Checksumme
  134.                 move.l  d0,KickCheckSum(a5)             * eintragen
  135.  
  136.                 move.w  #$ffff,d0                       * Farbspiel,
  137. Blink:          move.w  d0,$dff180                      * um anzuzei-
  138.                 dbra    d0,Blink                        * gen, daß
  139.  
  140.                 moveq   #0,d0                           * Observer
  141.                 rts                                     * installiert ist
  142.  
  143. *
  144. * Dieser Teil wird aufgerufen, wenn das Programm den KickTagPtr nicht
  145. * unbenutzt auffindet. Es könnte das eigene Programm oder z.B. die
  146. * resetfeste RAM-Disk der WB1.3 (RAD:) installiert sein. Diese wird
  147. * bei der Installation von Observer gelöscht. Schade 'drum.
  148. *
  149.  
  150. InsYet:         lea     IntName,a1
  151.                 moveq.l #0,d0
  152.                 CALLEXEC OpenLibrary
  153.                 move.l  d0,a6
  154.                 lea     YetAlert,a0
  155.                 moveq.l #0,d0
  156.                 move.l  #50,d1
  157.                 jsr     _LVODisplayAlert(a6)
  158.                 bne     EndYet
  159.  
  160.                 move.l  _SysBase,a1
  161.                 clr.l   KickMemPtr(a1)                  * alle drei
  162.                 clr.l   KickTagPtr(a1)                  * Kick-Zeiger
  163.                 clr.l   KickCheckSum(a1)                * löschen
  164.  
  165. EndYet:         move.l  a6,a1
  166.                 CALLEXEC CloseLibrary
  167.                 moveq   #0,d0
  168.                 rts
  169.  
  170. *
  171. * Hier stehen diverse Daten für den Installationsteil.
  172. *
  173.  
  174. YetAlert:       dc.b    0,168,10,"OBSERVER v1.0 ist bereits installiert!",0,$93
  175.                 dc.b    0,184,20,"Soll das Programm entfernt werden?",0,$ea
  176.                 dc.b    0,164,40,"= LINKS: NEIN =           = RECHTS: JA =",0,0
  177.  
  178. InstallAlert:   dc.b    0,172,10,"*** OBSERVER v1.0 by Holger Gzella ***",0,$93
  179.                 dc.b    0,172,20,"    Der ultimative Virus-Protektor",0,$ea
  180.                 dc.b    0,112,40,"ACHTUNG: Durch die Installation geht der Inhalt evtl.",0,$eb
  181.                 dc.b    0,152,50,"vorhandener resetfester RAM-DISKs verloren!",0,$ec
  182.                 dc.b    0,104,70,"= LINKS: Installieren =           = RECHTS: Abbrechen =",0,0
  183.  
  184.                 dc.b    "©1989 HG"
  185.  
  186. *
  187. * Dieser Code wird resetfest gemacht und vor jedem Bootvorgang
  188. * aufgerufen.
  189. *
  190.  
  191. ResetStuff:     movem.l d0-d6/a0-a6,-(SP)
  192.  
  193.                 lea     OldIO(pc),a0                    * alten DoIO-Vektor
  194.                 move.l  -454(a6),(a0)                   * zwischenspeichern
  195.  
  196.                 lea     SpecialFlag(pc),a0              * Flag für Spezial-
  197.                 move.b  #$00,(a0)                       * Optionen löschen
  198.  
  199.                 btst.b  #6,$bfe001                      * Maustaste?
  200.                 bne     ClearDosFlag                    * nein...weiter
  201.  
  202.                 move.b  #$ff,(a0)                       * S.-O. gewählt
  203.                 move.w  #$f50,$dff180                   * anzeigen
  204.  
  205. ClearDosFlag:   lea     DosFlag(pc),a0                  * Bootblock-Flag
  206.                 move.b  #$00,(a0)                       * löschen
  207.  
  208.                 move.l  #$50000,a0                      * benutztes RAM
  209.                 move.w  #5000,d0                        * löschen
  210. Clear:          move.l  #0,(a0)+
  211.                 dbra    d0,Clear
  212.  
  213. *
  214. * Das hier entspricht teilweise der Original-KickStart-Bootroutine,
  215. * die aber nach Installation dieses Programms nicht mehr zum Zuge
  216. * kommt.
  217. *
  218.  
  219.                 moveq   #0,d3
  220.                 sub.l   a4,a4
  221.                 link    a5,#-126
  222.                 sub.l   #$7e,a5
  223.                 move.l  a6,0(a5)
  224.                 move.l  d3,4(a5)
  225.  
  226.                 move.l  #$50000,a4
  227.  
  228.                 lea     IOName(pc),a0
  229.                 move.l  a0,54(a5)
  230.                 move.l  a0,102(a5)
  231.                 sub.l   a1,a1
  232.                 CALLEXEC FindTask
  233.                 move.l  d0,108(a5)
  234.                 move.b  #0,106(a5)
  235.  
  236.                 lea     112(a5),a0
  237.                 move.l  a0,(a0)
  238.                 addq.l  #4,(a0)
  239.                 clr.l   4(a0)
  240.                 move.l  a0,8(a0)
  241.                 moveq   #$ff,d0
  242.                 CALLEXEC AllocSignal
  243.                 move.b  d0,107(a5)
  244.                 lea     92(a5),a0
  245.                 move.l  a0,58(a5)
  246.                 lea     TrackName(pc),a0
  247.                 lea     44(a5),a1
  248.                 moveq   #0,d0
  249.                 moveq   #0,d1
  250.                 CALLEXEC OpenDevice
  251.  
  252.                 move.w  #$100,$dff096
  253.                 lea     44(a5),a1
  254.                 move.w  #$5,28(a1)
  255.                 CALLEXEC DoIO
  256.                 lea     44(a5),a1
  257.                 move.w  #$0d,28(a1)
  258.                 CALLEXEC DoIO
  259.                 move.l  76(a5),d2
  260.                 lea     44(a5),a1
  261.                 move.w  #$2,28(a1)
  262.                 move.l  #$400,36(a1)
  263.                 move.l  a4,40(a1)
  264.                 move.l  #$0,44(a1)
  265.                 CALLEXEC DoIO
  266.  
  267.                 move.l  4(a4),d0
  268.                 cmp.l   #$c0200f19,d0
  269.                 beq     ItsDos
  270.  
  271.                 cmp.l   #$0,d0
  272.                 beq     ItsNothing
  273.  
  274.                 lea     DosFlag(pc),a0
  275.                 move.b  #$ff,(a0)
  276.                 bra     ItsDos
  277.  
  278. ItsNothing:     lea     DosFlag(pc),a0
  279.                 move.b  #$01,(a0)
  280.                 move.l  #9,28(a1)
  281.                 move.l  #0,36(a1)
  282.                 CALLEXEC DoIO
  283.                 move.w  #$8100,$dff096
  284.                 CALLEXEC CloseDevice
  285.  
  286. ItsDos:         move.l  _SysBase,a6
  287.                 move.l  MemPtr(pc),a0
  288.                 move.l  a0,KickMemPtr(a6)
  289.  
  290.                 move.l  TagPtr(pc),a0
  291.                 move.l  a0,KickTagPtr(a6)
  292.  
  293.                 CALLEXEC SumKickData
  294.                 move.l  d0,KickCheckSum(a6)
  295.  
  296. ExecuteIt:      lea     IntName(pc),a1
  297.                 moveq.l #0,d0
  298.                 CALLEXEC OpenLibrary
  299.                 move.l  a6,a2
  300.                 move.l  d0,a6
  301.                 move.l  a6,a3
  302.  
  303.                 moveq.l #0,d0
  304.                 add.l   CoolCapture(a2),d0
  305.                 add.l   ColdCapture(a2),d0
  306.                 add.l   WarmCapture(a2),d0
  307.                 cmp.l   #0,d0
  308.                 beq     BootStuff
  309.  
  310.                 lea     CaptureAlert(pc),a0
  311.                 moveq.l #0,d0
  312.                 move.l  #60,d1
  313.                 jsr     _LVODisplayAlert(a6)
  314.                 bne     BootStuff
  315.  
  316.                 clr.l   CoolCapture(a2)
  317.                 clr.l   ColdCapture(a2)
  318.                 clr.l   WarmCapture(a2)
  319.  
  320. BootStuff:      lea     SpecialFlag(pc),a0
  321.                 cmp.b   #$ff,(a0)
  322.                 bne     CheckNormal
  323.  
  324.                 lea     AskParams(pc),a0
  325.                 moveq.l #0,d0
  326.                 move.l  #60,d1
  327.                 jsr     _LVODisplayAlert(a6)
  328.                 beq     AskForFast
  329.  
  330.                 move.l  a6,d6
  331.                 CALLEXEC GetCC
  332.                 lea     ret3(pc),a0
  333.                 move.l  d0,(a0)
  334.  
  335.                 move.w  #15,d0
  336.                 lea     ret00(pc),a0
  337. FetchRegs:      move.l  (SP)+,(a0)+
  338.                 dbra    d0,FetchRegs
  339.  
  340.                 move.w  #15,d0
  341. SetRegs:        move.l  -(a0),-(SP)
  342.                 dbra    d0,SetRegs
  343.  
  344.                 lea     ZwischenD1(pc),a1
  345.                 lea     ret00(pc),a0
  346.                 moveq.w #3,d4
  347.                 jsr     ConvHex(pc)
  348.  
  349.                 lea     ZwischenD2(pc),a1
  350.                 lea     ret01(pc),a0
  351.                 moveq.w #3,d4
  352.                 jsr     ConvHex(pc)
  353.  
  354.                 lea     ZwischenA1(pc),a1
  355.                 lea     ret10(pc),a0
  356.                 moveq.w #3,d4
  357.                 jsr     ConvHex(pc)
  358.  
  359.                 lea     ZwischenA2(pc),a1
  360.                 lea     ret11(pc),a0
  361.                 moveq.w #2,d4
  362.                 jsr     ConvHex(pc)
  363.  
  364.                 lea     ZwischenS(pc),a1
  365.                 lea     ret2(pc),a0
  366.                 moveq.w #0,d4
  367.                 jsr     ConvHex(pc)
  368.  
  369.                 lea     ZwischenC(pc),a1
  370.                 lea     ret3(pc),a0
  371.                 moveq.w #0,d4
  372.                 jsr     ConvHex(pc)
  373.  
  374.                 lea     ZwischenCool(pc),a1
  375.                 move.l  CoolCapture(a6),a0
  376.                 moveq.w #0,d4
  377.                 jsr     ConvHex(pc)
  378.  
  379.                 lea     ZwischenCold(pc),a1
  380.                 move.l  ColdCapture(a6),a0
  381.                 moveq.w #0,d4
  382.                 jsr     ConvHex(pc)
  383.  
  384.                 lea     ZwischenWarm(pc),a1
  385.                 move.l  WarmCapture(a6),a0
  386.                 moveq.w #0,d4
  387.                 jsr     ConvHex(pc)
  388.  
  389.                 lea     ZwischenIO(pc),a1
  390.                 move.l  OldIO(pc),a0
  391.                 moveq.w #0,d4
  392.                 jsr     ConvHex(pc)
  393.  
  394.                 move.l  d6,a6
  395.                 lea     ParamAlert(pc),a0
  396.                 moveq.l #0,d0
  397.                 move.l  #220,d1
  398.                 jsr     _LVODisplayAlert(a6)
  399.  
  400. AskForFast:     lea     AskNoFast(pc),a0
  401.                 moveq.l #0,d0
  402.                 move.l  #60,d1
  403.                 jsr     _LVODisplayAlert(a6)
  404.                 beq     AskForIO
  405.  
  406.                 move.l  a6,d6
  407.                 move.l  #$20004,d1
  408.                 CALLEXEC AvailMem
  409.                 move.l  #$20004,d1
  410.                 CALLEXEC AllocMem
  411.                 move.l  d6,a6
  412.  
  413. AskForIO:       lea     AskDoIO(pc),a0
  414.                 moveq.l #0,d0
  415.                 move.l  #60,d1
  416.                 jsr     _LVODisplayAlert(a6)
  417.                 beq     CheckNormal
  418.  
  419.                 move.l  a6,d6
  420.                 move.l  $4,a1
  421.                 lea     NewIO(pc),a0
  422.                 move.l  a0,d0
  423.                 move.l  #_LVODoIO,a0
  424.                 CALLEXEC SetFunction
  425.                 move.l  d6,a6
  426.  
  427. CheckNormal:    lea     DosFlag(pc),a0
  428.                 cmp.b   #$00,(a0)
  429.                 beq     Normal
  430.  
  431.                 cmp.b   #$01,(a0)
  432.                 beq     KickOrSo
  433.  
  434.                 lea     NoDosAlert(pc),a0
  435.                 moveq.l #0,d0
  436.                 move.l  #60,d1
  437.                 jsr     _LVODisplayAlert(a6)
  438.                 bne     Weiter
  439.  
  440.                 movem.l d0-d4/a0/a2-a6,-(SP)
  441.                 move.l  a4,a3
  442.                 move.l  #$51000,a4
  443.  
  444. zeigmal:        moveq.w #0,d4
  445.                 lea     ShowAlert(pc),a0
  446. nächster:       move.b  (a0)+,0(a4,d4.w)
  447.                 add.w   #1,d4
  448.                 cmp.b   #200,-1(a4,d4.w)
  449.                 bne     nächster
  450.                 move.w  #1,d3
  451. zeile:          bsr     zeilenanfang
  452.                 move.w  #59,d2
  453. zeichen:        move.b  (a3)+,d1
  454.                 cmp.b   #$20,d1
  455.                 blt     kleiner
  456.                 cmp.b   #127,d1
  457.                 blt     ok
  458. kleiner:        move.b  #46,d1
  459. ok:             move.b  d1,0(a4,d4.w)
  460.                 add.w   #1,d4
  461.                 dbra.w  d2,zeichen
  462.                 move.b  #0,0(a4,d4.w)
  463.                 move.b  #200,1(a4,d4.w)
  464.                 add.w   #2,d4
  465.                 add.w   #1,d3
  466. gof:            cmp.w   #18,d3
  467.                 bne     zeile
  468.  
  469. endal:          bsr     zeilenanfang
  470.                 moveq.w #0,d0
  471.                 move.l  #15,d2
  472.                 move.b  #0,0(a4,d4.w)
  473.                 move.b  #0,1(a4,d4.w)
  474.                 move.l  a4,a1
  475.                 movem.l (SP)+,d0-d4/a0/a2-a6
  476.  
  477.                 move.l  a1,a0
  478.                 move.l  a1,d6
  479.                 moveq.l #0,d0
  480.                 move.l  #200,d1
  481.                 jsr     _LVODisplayAlert(a6)
  482.                 beq     ClearIt
  483.  
  484. Weiter:         lea     WeiterAlert(pc),a0
  485.                 moveq.l #0,d0
  486.                 move.l  #40,d1
  487.                 jsr     _LVODisplayAlert(a6)
  488.                 move.l  a6,a3
  489.                 tst.l   d0
  490.                 beq     Special
  491.  
  492. Normal:         move.l  _SysBase,a6
  493.                 lea     44(a5),a1
  494.  
  495.                 movem.l d0-d6/a1-a7,-(SP)
  496.                 jsr     12(a4)
  497.                 movem.l (SP)+,d0-d6/a1-a7
  498.  
  499.                 move.l  a0,d6
  500.                 bra     Return
  501.  
  502. KickOrSo:       lea     KickAlert(pc),a0
  503.                 moveq.l #0,d0
  504.                 move.l  #30,d1
  505.                 jsr     _LVODisplayAlert(a6)
  506.                 moveq   #0,d0
  507.                 move.b  15(a5),d0
  508.                 CALLEXEC FreeSignal
  509.                 add.l   #$7e,a5
  510.                 unlk    a5
  511.                 move.l  a3,a0
  512.                 movem.l (SP)+,d0-d6/a1-a6
  513.                 bra     ResetStuff
  514.  
  515. Special:        lea     ResName(pc),a1
  516.                 CALLEXEC FindResident
  517.                 move.l  d0,a0
  518.                 move.l  22(a0),d6
  519.  
  520. Return:         move.l  a3,a1
  521.                 CALLEXEC CloseLibrary
  522.                 move.w  #$8100,$dff096
  523.                 lea     44(a5),a1
  524.                 CALLEXEC CloseDevice
  525.                 moveq   #0,d0
  526.                 move.b  15(a5),d0
  527.                 CALLEXEC FreeSignal
  528.                 add.l   #$7e,a5
  529.                 unlk    a5
  530.                 move.l  d6,a0
  531.                 movem.l (SP)+,d0-d6/a1-a6
  532.                 jmp     (a0)
  533.  
  534. ClearIt:        lea     ClearAlert(pc),a0
  535.                 moveq.l #0,d0
  536.                 move.l  #40,d1
  537.                 jsr     _LVODisplayAlert(a6)
  538.                 bne     Weiter
  539.  
  540.                 move.l  a6,d5
  541.  
  542.                 move.l  #$52000,a2
  543.                 lea     Block(pc),a1
  544.                 move.w  #13,d0
  545. CopyBlock:      move.l  (a1)+,(a2)+
  546.                 dbra    d0,CopyBlock
  547.  
  548.                 lea     44(a5),a1
  549.                 move.w  #$3,28(a1)
  550.                 move.l  #1024,36(a1)
  551.                 move.l  #$0,44(a1)
  552.                 move.l  #$52000,40(a1)
  553.                 CALLEXEC DoIO
  554.                 move.w  #$4,28(a1)
  555.                 CALLEXEC DoIO
  556.  
  557.                 move.l  d5,a3
  558.                 bra     Special
  559.  
  560.  even
  561. NewIO:          movem.l d0-d7/a0-a6,-(SP)
  562.                 move.l  20(a1),a0
  563.                 move.l  10(a0),a0
  564.                 lea     TrackName(pc),a2
  565.                 moveq   #8,d0
  566. CheckForTD:     cmpm.b  (a0)+,(a2)+
  567.                 bne     GoHome
  568.                 dbra    d0,CheckForTD
  569.                 bra     CheckForBB
  570.  
  571. GoHome:         movem.l (SP)+,d0-d7/a0-a6
  572.                 bra     JumpIO
  573.  
  574. CheckForBB:     movem.l (SP)+,d0-d7/a0-a6
  575.                 cmp.w   #$03,28(a1)
  576.                 bne     JumpIO
  577.                 tst.l   44(a1)
  578.                 bne     JumpIO
  579.  
  580.                 movem.l d0-d3/a0-a6,-(SP)
  581.                 move.l  a1,a5
  582.                 move.l  40(a1),a3
  583.  
  584.                 lea     IntName(pc),a1
  585.                 moveq.l #0,d0
  586.                 CALLEXEC OpenLibrary
  587.                 move.l  d0,a6
  588.  
  589.                 lea     BBTryAlert(pc),a0
  590.                 moveq.l #0,d0
  591.                 move.l  #60,d1
  592.                 jsr     _LVODisplayAlert(a6)
  593.                 bne     LetItBe
  594.  
  595.                 move.l  #$ff,d6
  596.  
  597. LetItBe:        move.l  a6,a1
  598.                 CALLEXEC CloseLibrary
  599.                 movem.l (SP)+,d0-d3/a0-a6
  600.                 cmp     #$ff,d6
  601.                 bne     JumpIntoDoom
  602.  
  603.                 move.l  #15,28(a1)
  604. JumpIntoDoom:   bra     JumpIO
  605.  
  606. BBTryAlert:     dc.b    0,130,10,"*** OBSERVER v1.0 by Holger Gzella ***",0,$93
  607.                 dc.b    0,110,30,"Schreib-Zugriffsversuch auf den Bootblock!",0,$ea
  608.                 dc.b    0,70,50,"= LINKS: Weiter =           = RECHTS: Verhindern =",0,0
  609.  
  610. ResName:        dc.b    "dos.library",0
  611.  even
  612. IntName:        dc.b    "intuition.library",0
  613.  even
  614. TrackName:      dc.b    "trackdisk.device",0
  615.  even
  616. IOName:         dc.b    "Strap",0
  617.  even
  618.  
  619. JumpIO:         dc.w    $4ef9
  620. OldIO:          dc.l    0
  621. MemPtr:         dc.l    0
  622. TagPtr:         dc.l    0
  623. DosFlag:        dc.b    0
  624. SpecialFlag:    dc.b    0
  625.  
  626. ret00:          ds.l    4
  627. ret01:          ds.l    4
  628. ret10:          ds.l    4
  629. ret11:          ds.l    3
  630. ret2:           ds.l    1
  631. ret3:           ds.l    1
  632.  
  633. zeilenanfang:   move.b  #0,0(a4,d4.w)
  634.                 move.b  #20,1(a4,d4.w)
  635.                 move.w  d3,d1
  636.                 mulu    #10,d1
  637.                 add.l   #20,d1
  638.                 move.b  d1,2(a4,d4.w)
  639.                 add.w   #3,d4
  640.                 rts
  641.  
  642. roll:           ror.w   #4,d1
  643.                 bsr     conv
  644.                 moveq.b #0,d1
  645.                 rol.w   #4,d1
  646.                 bsr     conv
  647.                 rts
  648.  
  649. conv:           add.b   #$30,d1
  650.                 cmp.b   #$3a,d1
  651.                 blt     small
  652.                 add.b   #$7,d1
  653. small:          move.b  d1,0(a4,d4.w)
  654.                 add.w   #1,d4
  655.                 rts
  656.  
  657. NoDosAlert:     dc.b    0,130,10,"*** OBSERVER v1.0 by Holger Gzella ***",0,$93
  658.                 dc.b    0,155,30,"ACHTUNG: Kein Standard-Bootblock!",0,$ea
  659.                 dc.b    0,90,50,"= LINKS: Weiter =           = RECHTS: Ansehen =",0,0
  660.  
  661. WeiterAlert:    dc.b    0,140,10,"Soll der Bootblock ausgeführt werden?",0,$93
  662.                 dc.b    0,50,30,"= LINKS: Ausführen =           = RECHTS: Überspringen =",0,0
  663.  
  664. KickAlert:      dc.b    0,120,10,"Die Diskette in DF0: ist nicht bootfähig!",0,$93
  665.                 dc.b    0,70,20,"Bitte Diskette wechseln und eine Maustaste drücken!",0,0
  666.  
  667. ShowAlert:      dc.b    0,75,10,"= LINKS: Ausführen =           = RECHTS: Löschen =",0,200
  668.  
  669. ClearAlert:     dc.b    0,125,10,"Soll der Bootblock überschrieben werden?",0,$93
  670.                 dc.b    0,60,30,"= LINKS: Weiter =           = RECHTS: Überschreiben =",0,0
  671.  
  672. CaptureAlert:   dc.b    0,220,10,"*** W A R N U N G ***",0,$93
  673.                 dc.b    0,140,30,"Die Capture-Vektoren sind verändert!!",0,$ea
  674.                 dc.b    0,65,50,"= LINKS: Weiter =           = RECHTS: Zurücksetzen =",0,0
  675.  
  676. AskParams:      dc.b    0,140,10,"*** OBSERVER v1.0  --  Spezialmenü ***",0,$93
  677.                 dc.b    0,100,30,"Sollen die Systemparameter angezeigt werden?",0,$ea
  678.                 dc.b    0,125,50,"= LINKS: JA =           = RECHTS: NEIN =",0,0
  679.  
  680. AskNoFast:      dc.b    0,140,10,"*** OBSERVER v1.0  --  Spezialmenü ***",0,$93
  681.                 dc.b    0,115,30,"Soll das Fast-Memory ausgeschaltet werden?",0,$ea
  682.                 dc.b    0,125,50,"= LINKS: JA =           = RECHTS: NEIN =",0,0
  683.  
  684. AskDoIO:        dc.b    0,140,10,"*** OBSERVER v1.0  --  Spezialmenü ***",0,$93
  685.                 dc.b    0,130,30,"Soll die DoIO-Routine verändert werden?",0,$ea
  686.                 dc.b    0,125,50,"= LINKS: JA =           = RECHTS: NEIN =",0,0
  687.  
  688. ParamAlert:     dc.b    0,205,10,"*** SYSTEMPARAMETER ***",0,$ff
  689.                 dc.b    0,20,30,"Datenregister D0-D3:",0,$ff,0,20,40
  690. ZwischenD1:     ds.b    36
  691.                 dc.b    0,$ff
  692.                 dc.b    0,20,50,"Datenregister D4-A7:",0,$ff,0,20,60
  693. ZwischenD2:     ds.b    36
  694.                 dc.b    0,$ff
  695.                 dc.b    0,20,80,"Adressregister A0-A3:",0,$ff,0,20,90
  696. ZwischenA1:     ds.b    36
  697.                 dc.b    0,$ff
  698.                 dc.b    0,20,100,"Adressregister A4-A6:",0,$ff,0,20,110
  699. ZwischenA2:     ds.b    27
  700.                 dc.b    0,$ff
  701.                 dc.b    0,20,130,"Benutzer-Stack: "
  702. ZwischenS:      ds.b    9
  703.                 dc.b    "     Condition-Codes: "
  704. ZwischenC:      ds.b    9
  705.                 dc.b    0,$ff
  706.                 dc.b    0,20,150,"CoolCapture-Vektor: "
  707. ZwischenCool:   ds.b    9
  708.                 dc.b    0,$ff
  709.                 dc.b    0,20,160,"ColdCapture-Vektor: "
  710. ZwischenCold:   ds.b    9
  711.                 dc.b    0,$ff
  712.                 dc.b    0,20,170,"WarmCapture-Vektor: "
  713. ZwischenWarm:   ds.b    9
  714.                 dc.b    0,$ff
  715.                 dc.b    0,20,190,"DoIO-Vektor: "
  716. ZwischenIO:     ds.b    9
  717.                 dc.b    0,$ff
  718.                 dc.b    0,200,210,"= LINKS/RECHTS: WEITER =",0,0
  719.  
  720. Block:          dc.l    $444f5300,$c0200f19,$00000370,$43fa0018,$4eaeffa0
  721.                 dc.l    $4a80670a,$20402068,$00167000,$4e7570ff,$60fa646f
  722.                 dc.l    $732e6c69,$62726172,$79000000
  723.  
  724. ConvHex:        moveq.w #7,d3
  725.                 move.l  (a0)+,d1
  726. ConvLoop1:      rol.l   #4,d1
  727.                 move.w  d1,d2
  728.                 and.w   #$0f,d2
  729.                 add.w   #$30,d2
  730.                 cmp.w   #$3a,d2
  731.                 bcs     ConvLoop2
  732.                 addq.w  #7,d2
  733. ConvLoop2:      move.b  d2,(a1)+
  734.                 dbra    d3,ConvLoop1
  735.                 move.b  #$20,(a1)+
  736.                 dbra    d4,ConvHex
  737.                 rts
  738.  
  739. ResetEnd:
  740.  
  741. Resident:       dc.w    RTC_MATCHWORD
  742.                 dc.l    0,0
  743.                 dc.b    1,0,0,-1
  744.                 dc.l    0,0,0
  745.  
  746. ResidentPtr:    dc.l    Resident
  747.  
  748. Code:           dc.l    0
  749. NewRes:         dc.l    0
  750. PtrTable:       dc.l    0
  751. MemListPtr:     dc.l    0
  752.  
  753.                 END
  754.  
  755.